package sistema.controleVendas.persistencia;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import sistema.controleVendas.entidades.Interesse;
import sistema.controleVendas.entidades.Pessoa;
import sistema.controleVendas.entidades.PessoaFisica;
import sistema.controleVendas.entidades.PessoaJuridica;

public class GerenciarPessoaPersistencia {
	EntityManager em = Conexao.contectar();
	public GerenciarPessoaPersistencia(){}
	public void adicionarPessoa(Pessoa pessoa){
		em.getTransaction().begin();
		em.persist(pessoa);
		em.getTransaction().commit();
	}
	public void atualizarPessoa(Pessoa pessoa){
		em.getTransaction().begin();
		em.persist(pessoa);
		em.getTransaction().commit();
	}
	public void removerPessoa(Pessoa pessoa){
		em.getTransaction().begin();
		em.remove(pessoa);
		em.getTransaction().commit();
	}
	public PessoaFisica buscarCliente(Object parametro, String campo){
		PessoaFisica pessoa = new PessoaFisica();
		em.getTransaction().begin();
		pessoa = (PessoaFisica)em.createQuery("Select p from PessoaFisica p where p."+campo+"=:param").
		setParameter("param", parametro).getSingleResult();
		em.getTransaction().commit();
		return pessoa;
	}
	public PessoaJuridica buscarJuridica(Object parametro, String campo){
		PessoaJuridica pessoa = new PessoaJuridica();
		em.getTransaction().begin();
		pessoa = (PessoaJuridica)em.createQuery("Select p from PessoaJuridica p where p."+campo+"=:param").
		setParameter("param", parametro).getSingleResult();
		em.getTransaction().commit();
		return pessoa;
	}
	public List<PessoaFisica> buscarPessoas(String campo, String valor, Interesse interesse){
		
		em.getTransaction().begin();
		
		List<PessoaFisica> pessoas = em.createQuery("Select p from PessoaFisica p where p.interesse.id=:param1 and lower(p."+campo+") like :param2").
		setParameter("param2", "%"+valor.toLowerCase()+"%").setParameter("param1", interesse.getId()).getResultList();
		em.getTransaction().commit();
		return pessoas;	
		
	}
	
	public List<PessoaFisica> buscarPessoas(Interesse interesse){
		em.getTransaction().begin();
		List<PessoaFisica> pessoas = em.createQuery("Select p from PessoaFisica p where p.interesse.id=:param1").
		setParameter("param1", interesse.getId()).getResultList();
		em.getTransaction().commit();
		return pessoas;	
	}
	
	public PessoaFisica buscarPessoaId(int id){
		return (PessoaFisica) em.createQuery("Select p from PessoaFisica p where p.id.id=:param").
		setParameter("param", id).getSingleResult();
	}
public List<PessoaJuridica> buscarPessoasJuridica(String campo, String valor, Interesse interesse){
		
		em.getTransaction().begin();
		List<PessoaJuridica> pessoas = em.createQuery("Select p from PessoaJuridica p where p.interesse.id=:param1 and lower(p."+campo+") like :param2").
		setParameter("param2", "%"+valor.toLowerCase()+"%").setParameter("param1", interesse.getId()).getResultList();
		em.getTransaction().commit();
		return pessoas;	
		
	}
	
	public List<PessoaJuridica> buscarPessoasJuridica(Interesse interesse){
		em.getTransaction().begin();
		List<PessoaJuridica> pessoas = em.createQuery("Select p from PessoaJuridica p where p.interesse.id=:param1").
		setParameter("param1", interesse.getId()).getResultList();
		em.getTransaction().commit();
		return pessoas;	
	}
	
	public PessoaJuridica buscarPessoaJuridicaId(int id){
		return (PessoaJuridica) em.createQuery("Select p from PessoaJuridica p where p.id.id=:param").
		setParameter("param", id).getSingleResult();
	}


}
